local ROOT = getroottable() foreach(k, v in ::NetProps.getclass()) if (k != "IsValid" && !(k in ROOT)) ROOT[k] <- ::NetProps[k].bindenv(::NetProps) foreach(k, v in ::Entities.getclass()) if (k != "IsValid" && !(k in ROOT)) ROOT[k] <- ::Entities[k].bindenv(::Entities) //if("uberchain2" in ROOT && uberchain2.MedicTwo.hOwner && uberchain2.MedicTwo.hOwner.IsValid()) return ::uberchain2 <- { function OnGameEvent_recalculate_holidays(_) { if(GetRoundState() == 3) delete ::uberchain2 } function OnGameEvent_player_spawn(params) { local hPlayer = GetPlayerFromUserID(params.userid) if (hPlayer.IsFakeClient()) { CreateTimer(function() { local tags = {} hPlayer.GetAllBotTags(tags); foreach (v in tags) printl(v) if (hPlayer.HasBotTag("bot_uberchain")) { uberchain2.assign(hPlayer) } }, 0.2) } } function OnGameEvent_player_hurt(params) { //fun.nuke() if (params.damageamount == 0) return local hAttacker = GetPlayerFromUserID(params.attacker) printl(hAttacker) if (ListOfPairs.len() >= 1) foreach (pair in ListOfPairs) if (pair.isThisGuyYours(hAttacker, "hurt")) break } function OnGameEvent_player_chargedeployed(params) { local hPlayer = GetPlayerFromUserID(params.userid) if (ListOfPairs.len() >= 1) foreach (pair in ListOfPairs) if (pair.isThisGuyYours(hPlayer, "chargedeployed")) break } function OnGameEvent_player_death(params) { local hPlayer = GetPlayerFromUserID(params.userid) if (ListOfPairs.len() >= 1) foreach (pair in ListOfPairs) if (pair.isThisGuyYours(hPlayer, "death")) break } function assign(hMedicBot) { printl(hMedicBot) local MedicClass = UberChainMedic(hMedicBot, GetPropEntityArray(hMedicBot, "m_hMyWeapons", 1), "Saw" + EventIndex, "Uber" + EventIndex) if (MedicOne == null) { MedicOne = MedicClass EventIndex += 1 return } MedicTwo = MedicClass EventIndex += 1 ListOfPairs.append(MedicPair(MedicOne, MedicTwo)) ListOfPairs[ListOfPairs.len() - 1].swap() MedicOne = null MedicTwo = null } function ChangeBotAttributes(params) { EntFire("point_populator_interface", "ChangeBotAttributes", "Uber") } function list() { printl(MedicOne) printl(MedicTwo) } function show() { foreach (pair in ListOfPairs) pair.showMember() } function showme() { printl(ListOfPairs.len()) } a = [1, 2, 3] function show2() { local index = 2 CreateTimer(function() {printl("hi") printl(uberchain2.a[index])}, 1) } ListOfPairs = [] MedicOne = null MedicTwo = null EventIndex = 1 function Think() { foreach (pair in ListOfPairs) pair.shouldSwap() } } UberChainMedic <- class { hOwner = null hWeapon = null //bHasUber = false //bUberUsed = false MeleeAttribute = "" HealAttribute = "" function useMelee() { EntFire("point_populator_interface", "ChangeBotAttributes", this.MeleeAttribute) //printl(this.MeleeAttribute) } function useMedigun() { EntFire("point_populator_interface", "ChangeBotAttributes", this.HealAttribute) //printl(this.HealAttribute) } function printsome() { printl(HealAttribute + " " + MeleeAttribute) } constructor(hOwner, hWeapon, MeleeAttribute, HealAttribute) { if (hWeapon == null) return this.hOwner = hOwner this.hWeapon = hWeapon this.MeleeAttribute = MeleeAttribute this.HealAttribute = HealAttribute } } MedicPair <- class { MedicOne = null MedicTwo = null MedicOneRef = null MedicTwoRef = null bUberUsed = false iMeleeCount = 0 iMeleeCountTarget = 1 flUberDuration = 8 Timer_swap = null Timer_uber = null function show() { printl(iMeleeCount) printl(bUberUsed) } function findIndex() { //printl(uberchain2.ListOfPairs.find(this)) return uberchain2.ListOfPairs.find(this) } function showMember() { printl(MedicOne.hOwner + " " + MedicTwo.hOwner) } constructor(MedicOne, MedicTwo) { this.MedicOne = MedicOne this.MedicTwo = MedicTwo MedicOneRef = MedicOne.weakref() MedicTwoRef = MedicTwo.weakref() } function swap() { local swapRef = MedicOneRef MedicOneRef = MedicTwoRef MedicTwoRef = swapRef MedicOneRef.hOwner.SetPlayerClass(5) MedicTwoRef.hOwner.SetPlayerClass(3) local indexLocal = findIndex() Timer_swap = CreateTimer(@() uberchain2.ListOfPairs[indexLocal].MedicOneRef.useMedigun(), 0.1) MedicTwoRef.useMelee() SetPropFloat(MedicTwoRef.hWeapon, "m_flChargeLevel", 1) // it must work this way bUberUsed = false iMeleeCount = 0 //MedicOneRef.hOwner.SetCustomModelWithClassAnimations("models/bots/medic/bot_medic.mdl") //MedicTwoRef.hOwner.SetCustomModelWithClassAnimations("models/bots/medic/bot_medic.mdl") } function uberDepleted() { bUberUsed = true shouldSwap() } function shouldSwap() { if (bUberUsed && (iMeleeCount >= iMeleeCountTarget)) swap() } function isThisGuyYours(hMedicBot, reason) { if (MedicOne.hOwner == hMedicBot || MedicTwo.hOwner == hMedicBot) { if (reason == "hurt") { iMeleeCount += 1 shouldSwap() } else if (reason == "chargedeployed") { local indexLocal = findIndex() Timer_uber = CreateTimer(@() uberchain2.ListOfPairs[indexLocal].uberDepleted(), flUberDuration) //printl("chargedeployed") } else if (reason == "death") // RIP bozo { //MedicOne.hOwner == hMedicBot ? MedicOne = null : MedicTwo = null //if (MedicOne == null && MedicTwo == null) // printl("this pair gone") //if (Timer_swap != null) // Timer_swap.kill() //if (Timer_uber != null) // Timer_uber.kill() uberchain2.ListOfPairs.remove(findIndex()) //uberchain2.show() } return true // Yuh Uh } else return false // Nuh Uh } } __CollectGameEventCallbacks(uberchain2) IncludeScript("lib", ROOT)