All Activity

This stream auto-updates   

  1. Past hour
  2. That code certainly cleared up the errors, thanks! Now I can onto the fact that this dam thing won't work... fully. When I try using the Special power for the visual link, it does not work. So I switched to the 'NAMED_ATTACK_NAMED' method, and removed the ability for the Obelisk weapon to damage other Obelisk. On testing this, the visual link works, but the issue is that the Obelisk will all fire support beams at each other, and ignore enemy targets! Code: GetObj={} function GetObj.String(object) if type(object) == "string" then return object else local _, count = gsub(ObjectDescription(object),"%(","") if count>1 then return strsub(ObjectDescription(object), strfind(ObjectDescription(object),"(",1,true)+1,strfind(ObjectDescription(object),")",1,true)-1) else local StrRef = "object" .. RandomString(5) ExecuteAction("SET_UNIT_REFERENCE", StrRef, object) return StrRef end end end function GetObj.Table(object) if type(object) == "table" then return object else for k,v in globals() do if strfind(k,"ObjID") ~= nil and strfind(ObjectDescription(v),object) then return rawget(globals(),k) end end return object end end function GetObj.Hash(object) return tostring(tonumber(strsub(ObjectTemplateName(GetObj.Table(object)), 6, 13), 16)) end CompareTable = { LT=0, LE=1, EQ=2, GE=3, GT=4, NE=5, ["<"]=0, ["<="]=1, ["=="]=2, [">="]=3, [">"]=4, ["~="]=5 } function GetObjectDistance(object1 ,object2, start_distance) if object1==nil or object2==nil or not EvaluateCondition("NAMED_NOT_DESTROYED",object1) or not EvaluateCondition("NAMED_NOT_DESTROYED",object2) then return 0 end object1=GetObj.String(object1) object2=GetObj.String(object2) local v = {} v.GetDistance = function(lowerlimit,upperlimit) local mid=(upperlimit+lowerlimit)/2 if upperlimit-lowerlimit<=1 then return lowerlimit elseif EvaluateCondition("DISTANCE_BETWEEN_OBJ", %object1, %object2, CompareTable["<"], mid) then return %v.GetDistance(lowerlimit,mid) else return round(%v.GetDistance(mid,upperlimit)) end end if start_distance then return v.GetDistance(0,tonumber(start_distance)) else return v.GetDistance(0,12870) end --maxdiagsize=ceil(sqrt(2*(7500+2*800)^2))) end function random(...) --overwritting lua native function for multiplayer compatibility local RandomNumber = function(a,b) return floor(a+((b-a)*GetRandomNumber())+0.5) end if getn(arg) == 0 then return floor(GetRandomNumber()+0.5) elseif getn(arg) == 1 then return RandomNumber(1,arg[1]) elseif getn(arg) == 2 then return RandomNumber(arg[1],arg[2]) else return arg[RandomNumber(1,getn(arg))] end end function RandomString(l) if l < 1 then l=5 end local s = "" local ascii_zone = {} for i=1,l,1 do ascii_zone[1] = random(97, 122) ascii_zone[2] = random(65, 90) ascii_zone[3] = random(48, 57) s = s .. strchar(ascii_zone[random(3)]) end return ("_" .. s) end function CascadeForwarding(self) self=GetObj.Table(self) local MaximumSupportDistance = 13000 local TowerAttackRange = 375 --here attack range of nod obelisk local ObjectList = {} local DistanceTable = {} local SupportConnection={} --create object list of all support towers for k,v in globals() do if strfind(k,"ObjID") and GetObj.Hash(self)==GetObj.Hash(v) and self~=v and ObjectTeamName(self)==ObjectTeamName(v) then if EvaluateCondition("DISTANCE_BETWEEN_OBJ", GetObj.String(self),GetObj.String(v), CompareTable["<="], MaximumSupportDistance) and ObjectCountNearbyEnemies(v,TowerAttackRange)==0 then tinsert(ObjectList,v) end end end tinsert(ObjectList,self) --create 2d matrix with distances for i=1,getn(ObjectList),1 do DistanceTable[tostring(ObjectList[i])]={} end for i=1,getn(ObjectList),1 do for j=i,getn(ObjectList),1 do if i==j then DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])]=0 else if DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])] == nil then DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])]=GetObjectDistance(GetObj.String(ObjectList[i]),GetObj.String(ObjectList[j])) DistanceTable[tostring(ObjectList[j])][tostring(ObjectList[i])]=DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])] end end end end --sort object list by distance to main tower local SortHelper=function(Object1,Object2) if %DistanceTable[tostring(%self)][tostring(Object1)] < %DistanceTable[tostring(%self)][tostring(Object2)] then return true end end sort(ObjectList,SortHelper) --main part: distribute one tower for each tower to support local MainNodeTable = {} tinsert(MainNodeTable,self) for i=2,getn(ObjectList),1 do local MainNodeCriteria = true local NextMainNode --closest main node local NextMainNodeDistance = 13000 for k=1,getn(MainNodeTable),1 do if NextMainNodeDistance > DistanceTable[tostring(MainNodeTable[k])][tostring(ObjectList[i])] then NextMainNodeDistance = DistanceTable[tostring(MainNodeTable[k])][tostring(ObjectList[i])] NextMainNode = MainNodeTable[k] end end local ShortestLinkToNextMainNodeDistance = 13000 for j=3,getn(ObjectList),1 do if not i==j then local iNodeTojNodeDistance = DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])] local iNodeToNextMainNodeDistance = DistanceTable[tostring(NextMainNode)][tostring(ObjectList[i])] local jNodeToNextMainNodeDistance = DistanceTable[tostring(NextMainNode)][tostring(ObjectList[j])] if jNodeToNextMainNodeDistance < iNodeToNextMainNodeDistance then if iNodeTojNodeDistance < iNodeToNextMainNodeDistance then MainNodeCriteria = false local LinkToNextMainNodeDistance = iNodeTojNodeDistance + jNodeToNextMainNodeDistance if ShortestLinkToNextMainNodeDistance > LinkToNextMainNodeDistance then SupportConnection[tostring(ObjectList[i])]=ObjectList[j] ShortestLinkToNextMainNodeDistance = LinkToNextMainNodeDistance end end end end end if MainNodeCriteria == true then tinsert(MainNodeTable,ObjectList[i]) SupportConnection[tostring(ObjectList[i])]=NextMainNode end end --fire cumulative attribute modifier weapon on main tower (self) for i=2,getn(ObjectList),1 do ObjectCreateAndFireTempWeapon(self,"PrismTowerSupportWeapon") end --fire special power to display visual support beams for i=2,getn(ObjectList),1 do -- ExecuteAction("NAMED_FIRE_SPECIAL_POWER_AT_NAMED",ObjectList[i],"SpecialPower_PrismForwarding",SupportConnection[tostring(ObjectList[i])]) ExecuteAction("NAMED_ATTACK_NAMED",ObjectList[i],SupportConnection[tostring(ObjectList[i])]) end end function round(number) return floor(number+0.5) end function _ALERT(message) ExecuteAction("SHOW_MILITARY_CAPTION", "\n\n\n\n" .. tostring(message) .. "\n", 20) local file = "" local filehandle = openfile("ErrorLog",'a') if filehandle ~= nil then write(filehandle,"\n" .. "ErrorLogToFile(" .. date() .. "): " .. message) else local filehandle = writeto(file) write(filehandle,"\n" .. "ErrorLogToFile(" .. date() .. "): " .. message) end flush(filehandle) closefile(filehandle) end Thanks!
  3. Today
  4. My favorite song of the 1970s.... electronic disco. And other great songs for a Friday:
  5. Oh sorry, that one function was missing. Simple math round: Let's see what comes next ;).
  6. I disabled Origin In-Game for the game itself and in Origin's settings but the same issue happens. As before I used the fixed launchers. When I apply the C&C Reloaded mod and try to run it the "syringe" application runs but nothing happens. If I launch "gamemd" the mouse cursor loads but nothing happens, and the program is running if I check Task Manager. If I try any other .exe that launches the game I get the Origin error. Sigh. I ****ing hate Origin.
  7. Yesterday
  8. Nice! I now have error messages! I have attached it. Here is then code order I added comments for the error line numbers (although you probably do not need them): GetObj={} function GetObj.String(object) if type(object) == "string" then return object else local _, count = gsub(ObjectDescription(object),"%(","") if count>1 then return strsub(ObjectDescription(object), strfind(ObjectDescription(object),"(",1,true)+1,strfind(ObjectDescription(object),")",1,true)-1) else local StrRef = "object" .. RandomString(5) ExecuteAction("SET_UNIT_REFERENCE", StrRef, object) return StrRef end end end function GetObj.Table(object) if type(object) == "table" then return object else for k,v in globals() do if strfind(k,"ObjID") ~= nil and strfind(ObjectDescription(v),object) then return rawget(globals(),k) end end return object end end function GetObj.Hash(object) return tostring(tonumber(strsub(ObjectTemplateName(GetObj.Table(object)), 6, 13), 16)) end CompareTable = { LT=0, LE=1, EQ=2, GE=3, GT=4, NE=5, ["<"]=0, ["<="]=1, ["=="]=2, [">="]=3, [">"]=4, ["~="]=5 } function GetObjectDistance(object1 ,object2, start_distance) if object1==nil or object2==nil or not EvaluateCondition("NAMED_NOT_DESTROYED",object1) or not EvaluateCondition("NAMED_NOT_DESTROYED",object2) then return 0 end object1=GetObj.String(object1) object2=GetObj.String(object2) local v = {} v.GetDistance = function(lowerlimit,upperlimit) local mid=(upperlimit+lowerlimit)/2 if upperlimit-lowerlimit<=1 then return lowerlimit elseif EvaluateCondition("DISTANCE_BETWEEN_OBJ", %object1, %object2, CompareTable["<"], mid) then return --Error (Line 45) else return round(%v.GetDistance(mid,upperlimit)) end --Error (Line 46) end if start_distance then return v.GetDistance(0,tonumber(start_distance)) else return v.GetDistance(0,12870) end --maxdiagsize=ceil(sqrt(2*(7500+2*800)^2))) --Error (Line 49) end function random(...) --overwritting lua native function for multiplayer compatibility local RandomNumber = function(a,b) return floor(a+((b-a)*GetRandomNumber())+0.5) end if getn(arg) == 0 then return floor(GetRandomNumber()+0.5) elseif getn(arg) == 1 then return RandomNumber(1,arg[1]) elseif getn(arg) == 2 then return RandomNumber(arg[1],arg[2]) else return arg[RandomNumber(1,getn(arg))] end end function RandomString(l) if l < 1 then l=5 end local s = "" local ascii_zone = {} for i=1,l,1 do ascii_zone[1] = random(97, 122) ascii_zone[2] = random(65, 90) ascii_zone[3] = random(48, 57) s = s .. strchar(ascii_zone[random(3)]) end return ("_" .. s) end function CascadeForwarding(self) self=GetObj.Table(self) local MaximumSupportDistance = 13000 local TowerAttackRange = 375 --here attack range of nod obelisk local ObjectList = {} local DistanceTable = {} local SupportConnection={} --create object list of all support towers for k,v in globals() do if strfind(k,"ObjID") and GetObj.Hash(self)==GetObj.Hash(v) and self~=v and ObjectTeamName(self)==ObjectTeamName(v) then if EvaluateCondition("DISTANCE_BETWEEN_OBJ", GetObj.String(self),GetObj.String(v), CompareTable["<="], MaximumSupportDistance) and ObjectCountNearbyEnemies(v,TowerAttackRange)==0 then tinsert(ObjectList,v) end end end tinsert(ObjectList,self) --create 2d matrix with distances for i=1,getn(ObjectList),1 do DistanceTable[tostring(ObjectList[i])]={} end for i=1,getn(ObjectList),1 do for j=i,getn(ObjectList),1 do if i==j then DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])]=0 else if DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])] == nil then DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])]=GetObjectDistance(GetObj.String(ObjectList[i]),GetObj.String(ObjectList[j])) --Error (Line 99) DistanceTable[tostring(ObjectList[j])][tostring(ObjectList[i])]=DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])] end end end end --sort object list by distance to main tower local SortHelper=function(Object1,Object2) if %DistanceTable[tostring(%self)][tostring(Object1)] < %DistanceTable[tostring(%self)][tostring(Object2)] then return true end end sort(ObjectList,SortHelper) --main part: distribute one tower for each tower to support local MainNodeTable = {} tinsert(MainNodeTable,self) for i=2,getn(ObjectList),1 do local MainNodeCriteria = true local NextMainNode --closest main node local NextMainNodeDistance = 13000 for k=1,getn(MainNodeTable),1 do if NextMainNodeDistance > DistanceTable[tostring(MainNodeTable[k])][tostring(ObjectList[i])] then NextMainNodeDistance = DistanceTable[tostring(MainNodeTable[k])][tostring(ObjectList[i])] NextMainNode = MainNodeTable[k] end end local ShortestLinkToNextMainNodeDistance = 13000 for j=3,getn(ObjectList),1 do if not i==j then local iNodeTojNodeDistance = DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])] local iNodeToNextMainNodeDistance = DistanceTable[tostring(NextMainNode)][tostring(ObjectList[i])] local jNodeToNextMainNodeDistance = DistanceTable[tostring(NextMainNode)][tostring(ObjectList[j])] if jNodeToNextMainNodeDistance < iNodeToNextMainNodeDistance then if iNodeTojNodeDistance < iNodeToNextMainNodeDistance then MainNodeCriteria = false local LinkToNextMainNodeDistance = iNodeTojNodeDistance + jNodeToNextMainNodeDistance if ShortestLinkToNextMainNodeDistance > LinkToNextMainNodeDistance then SupportConnection[tostring(ObjectList[i])]=ObjectList[j] ShortestLinkToNextMainNodeDistance = LinkToNextMainNodeDistance end end end end end if MainNodeCriteria == true then tinsert(MainNodeTable,ObjectList[i]) SupportConnection[tostring(ObjectList[i])]=NextMainNode end end --fire cumulative attribute modifier weapon on main tower (self) for i=2,getn(ObjectList),1 do ObjectCreateAndFireTempWeapon(self,"PrismTowerSupportWeapon") end --fire special power to display visual support beams for i=2,getn(ObjectList),1 do ExecuteAction("NAMED_FIRE_SPECIAL_POWER_AT_NAMED",ObjectList[i],"SpecialPower_PrismForwarding",SupportConnection[tostring(ObjectList[i])]) --ExecuteAction("NAMED_ATTACK_NAMED",ObjectList[i],SupportConnection[tostring(ObjectList[i])]) end end function _ALERT(message) ExecuteAction("SHOW_MILITARY_CAPTION", "\n\n\n\n" .. tostring(message) .. "\n", 20) local file = "" local filehandle = openfile("ErrorLog",'a') if filehandle ~= nil then write(filehandle,"\n" .. "ErrorLogToFile(" .. date() .. "): " .. message) else local filehandle = writeto(file) write(filehandle,"\n" .. "ErrorLogToFile(" .. date() .. "): " .. message) end flush(filehandle) closefile(filehandle) end Thanks! ErrorLog.txt
  9. hey, guys, i am looking for editing NOD ATTACK BIKE model, i even have W3X importer script from bibber and 3ds max 7. Unfortunately, i can not understand about import a model into 3ds max 7. Can anyone help me ? Thank You.
  10. Disable Origin In-Game for all TUC games that you've installed and apply Bibber's fixed launchers.
  11. Hey, I want to use mods with RA2 and YR but I can't figure out how to make them work. I install the fixed launchers, I apply the faster graphics patch, then I install C&C Reloaded but when I try to launch the game it doesn't work. I then try to use one of the game's launchers but I get a generic "can't launch" error and the game disappears from my Origin library, most likely because of the mod. Does anyone know how to get mods to work, C&C Reloaded in particular?
  12. hi i need help for RED ALERT 3 (PS3) co op trophies online trophies PSN: TwinDragon_01 2017-05-25 english or german
  13. I remember this article: http://whatculture.com/gaming/10-unplayable-video-games-that-were-released-despite-being-broken But there are still some games that are almost unplayable today especially from my experience. Most recently.... the disappointing The Crew (it may have two expansion DLCs but it's strange why there will be a sequel to that coming in 2018). Despite only playable for a 64-bit PC, no matter what workarounds I had to try to run the game and even disabling most of the stuff, the game cannot launch at its entirety. It didn't work for me in Win7 64-bit but I haven't tried Win10 64-bit. The always online option has hurt a lot of players since it's a MMO with some SP and patches are limited to fix the major issues and glitches within the game. The strong DRM was probably one of the reasons why the game cannot launch properly. One corrupted file or a unstable Internet connection = failure. Technically this never happened when I played C&C4, Diablo III, Starcraft II, UT4, Dota 2 and Team Fortress 2. Other older games I found very disappointing causing them to almost not launch at all are SWAT 2 (retail CD and even the GOG version) and Andretti Racing. Both of them lacked patches to fix crashes and to make playability stable. Andretti Racing can never run on recent Windows OSs, except Windows 95/98 and its controls.... terrible. I'll bet some of you may have painful experiences with unplayable games. Edit: This post is not finished at the time since there's more I am trying to recall.
  14. I... want to agree with this, if it were to ever happen. While I wasn't the biggest fan of how ridiculous the theme of Red Alert went or how silly the writing was, I really did enjoy the game-play. Some of my best online Command and Conquer memories, not including Renegade and its mods, are from playing Red Alert 2 and Yuri's Revenge online. I still play it to this day, but only the skirmish mode. Regarding "rebooting" the series, I wouldn't mind this as long as they don't use the Tiberium or Red Alert universes. Electronic Arts already killed them for me, I don't want to be revived and killed again. I suppose they should either create a new universe or continue the Generals one, and they better use a game engine that the community can use to create awesome mods. Sadly Frostbite is very "anti-mod" but EA has been using this for most games they develop and/or publish these days.
  15. A great tactic in Mental Omega, and I'll bet this tactic may also work in RA3:
  16. Last week
  17. Not me.. I can't stand the ugly trout. But she still finds her way onto the Local Station way too often. I'm just highlighting my curse. Actually and truthfully.. I've gotten myself into the Synthwave / 80s Retro Electro / Retrowave scene lately (probably a midlife crisis).. This Remixed song really hits my groove right now:
  18. Ok copy the now updated code and also all the helper functions from my main post and try again. For lua error logs use the following function and insert it into your scripts.lua file: function _ALERT(message) ExecuteAction("SHOW_MILITARY_CAPTION", "\n\n\n\n" .. tostring(message) .. "\n", 20) local file = "" local filehandle = openfile("ErrorLog",'a') if filehandle ~= nil then write(filehandle,"\n" .. "ErrorLogToFile(" .. date() .. "): " .. message) else local filehandle = writeto(file) write(filehandle,"\n" .. "ErrorLogToFile(" .. date() .. "): " .. message) end flush(filehandle) closefile(filehandle) end It will save/refresh a file called "ErrorLog" which will be in the same folder where your "cnc3game.dat" is placed. Send the logs to me then if you can't solve it. Else there must be a xml coding flaw somewhere we missed. Here some pictures of some more tests, also in first person mode which looks epic with all the towers doing their action at once:
  19. Fantastic! I can't wait to play this.
  20. Yes, people successfully remade and ported GTA III Liberty City, GTA San Andreas and even GTA V Lost Santos in GTA IV as mods. The problem with GTA V Los Santos in GTA IV is that it couldn't expand the entire map due to the engine's limitations so only the Los Santos area is completed but takes too much system resources, leading to crashes. Yes, even people successfully remade and ported GTA IV Liberty City and GTA V Los Santos in GTA San Andreas: Download: https://drive.google.com/uc?id=0B4gTzNzbQHKwVngyWGQ5UzRHdTg&export=download Because it's still in beta, the Los Santos streets and objects are similar to the one in GTA V Los Santos in GTA IV, meaning only Los Santos is finished. Liberty City is also finished. This mod is perfect for people with low-end PCs with weak graphic cards (like I used a GeForce GT 220 for that). Unlike GTA V Los Santos in GTA IV, it appears both Liberty City and Los Santos are in the same map within GTA SA. The difference is using way less system resources and it loads quickly. However, there's one problem. The objects do not load as quickly as you drive through the map. When it comes to Los Santos, it needs hundreds of thousands of objects to load and to be visible at a time.... only if you are using low quality and resolution graphics and minimal view distance. The people who did this project must have used high resolution LOD on those objects and I was surprised when I saw the quality in GTA SA, almost compared to GTA IV!
  21. Thanks for your help! My first skirmish test failed. Script: function CascadeForwarding(self) local MaximumSupportDistance = 10000 local TowerAttackRadius = 375 --here attack range of nod obelisk local ObjectHash = "3868904616" --"NODObelisk" local ObjectList = {} local DistanceTable = {} local SupportConnection={} --create list of all relevant objects for k,v in globals() do if strfind(k,"ObjID")~=nil and GetObj.Hash(v)==ObjectHash and v~=self and ObjectTeamName(self)==ObjectTeamName(v) then local Distance = GetObjectDistance(GetObj.String(self),GetObj.String(v)) if Distance <= MaximumSupportDistance and ObjectCountNearbyEnemies(v,TowerAttackRadius)==0 then tinsert(ObjectList,v) end end end LastSupportTowerCount=getn(ObjectList) tinsert(ObjectList,self) --create 2d matrix with distances for i=1,getn(ObjectList),1 do DistanceTable[tostring(ObjectList[i])]={} end for i=1,getn(ObjectList),1 do for j=i,getn(ObjectList),1 do if i==j then DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])]=0 else if DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])] == nil then DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])]=GetObjectDistance(GetObj.String(ObjectList[i]),GetObj.String(ObjectList[j])) DistanceTable[tostring(ObjectList[j])][tostring(ObjectList[i])]=DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])] end end end end --sort object list by distance to main tower local SortHelper=function(Object1,Object2) if %DistanceTable[tostring(%self)][tostring(Object1)] < %DistanceTable[tostring(%self)][tostring(Object2)] then return true end end sort(ObjectList,SortHelper) --main part: distribute one tower for each tower to support local MainNodeTable = {} --tinsert(MainNodeTable,{[1]=self,["n"]=1}) tinsert(MainNodeTable,self) for i=2,getn(ObjectList),1 do local MainNodeCriteria = true local NextMainNode --closest main node local NextMainNodeDistance = 13000 for k=1,getn(MainNodeTable),1 do if NextMainNodeDistance > DistanceTable[tostring(MainNodeTable[k])][tostring(ObjectList[i])] then NextMainNodeDistance = DistanceTable[tostring(MainNodeTable[k])][tostring(ObjectList[i])] NextMainNode = MainNodeTable[k] end end local ShortestLinkToNextMainNodeDistance = 13000 for j=3,getn(ObjectList),1 do if not i==j then local iNodeTojNodeDistance = DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])] local iNodeToNextMainNodeDistance = DistanceTable[tostring(NextMainNode)][tostring(ObjectList[i])] local jNodeToNextMainNodeDistance = DistanceTable[tostring(NextMainNode)][tostring(ObjectList[j])] if jNodeToNextMainNodeDistance < iNodeToNextMainNodeDistance then if iNodeTojNodeDistance < iNodeToNextMainNodeDistance then MainNodeCriteria = false local LinkToNextMainNodeDistance = iNodeTojNodeDistance + jNodeToNextMainNodeDistance if ShortestLinkToNextMainNodeDistance > LinkToNextMainNodeDistance then SupportConnection[tostring(ObjectList[i])]=ObjectList[j] ShortestLinkToNextMainNodeDistance = LinkToNextMainNodeDistance end end end end end if MainNodeCriteria == true then tinsert(MainNodeTable,ObjectList[i]) SupportConnection[tostring(ObjectList[i])]=NextMainNode end end --execute for i=1,LastSupportTowerCount,1 do --fire attribute booster weapon on main tower (for each support tower one weapon): ObjectCreateAndFireTempWeapon(self,"PrismTowerSupportWeapon") --alternative via object: --ExecuteAction("CREATE_NAMED_ON_TEAM_AT_OBJECTTYPE_WITH_ORIENTATION",RandomString(5),ObjectTypeToSpawn,GetTeamName(self),self,0) end for i=2,getn(ObjectList),1 do --use direct attack for testing: -- ExecuteAction("NAMED_ATTACK_NAMED",ObjectList[i],SupportConnection[tostring(ObjectList[i])]) --else use non damaging special power weapon: ExecuteAction("NAMED_FIRE_SPECIAL_POWER_AT_NAMED",ObjectList[i],"SpecialPower_PrismForwarding",SupportConnection[tostring(ObjectList[i])]) end end I am using the attribute weapon suggested. And a simple weapon fire special power: <SpecialPower id="ModuleTag_PrismForwardingSpecialPower" SpecialPowerTemplate="SpecialPower_PrismForwarding" UpdateModuleStartsAttack="true"></SpecialPower> <WeaponFireSpecialAbilityUpdate id="ModuleTag_PrismForwardingBeamUpdate" SpecialPowerTemplate="SpecialPower_PrismForwarding" SpecialWeapon="TestObeliskLaser" StartAbilityRange="99999.0" UnpackTime="1s" WhichSpecialWeapon="1"></WeaponFireSpecialAbilityUpdate> <SpecialPowerTemplate id="SpecialPower_PrismForwarding" Flags="NEEDS_OBJECT_FILTER" TargetType="OBJECT"> <ObjectFilter Relationship="SAME_PLAYER" Rule="NONE"> <IncludeThing>NODOBELISK</IncludeThing> </ObjectFilter> </SpecialPowerTemplate> The scriptevent is also setup. I am running the test on the Nod Obelisk to start with.
  22. The only thing needed is the attacking unit/prism tower/obelisk or whatever to use that function on attacking: <ModelConditionEvent Name="BeginPreAttackA"> <Conditions>+PREATTACK_A</Conditions> </ModelConditionEvent> <EventList Name="PrismTower_EventList" Inherit="BaseScriptFunctions"> <EventHandler EventName="BeginPreAttackA" ScriptFunctionName="CascadeForwarding" DebugSingleStep="false"/> </EventList> No more broadcasting to other towers needed. That function (CascadeForwarding) handles everything else for you conveniently. I will possibly edit my main post above in the next days and change some lines and add all necessary helper functions needed for completness. It is indeed not a trivial script and also some more problems will possibly occur while setting everything up for the real prism tower. Just keep me updated and we will fix everything one by one. The things you need to change later for your `final product` is the ObjectHash, TowerAttackradius, MaximumSupportDistance and also adapt the content of the last two for loops according to your taste. For the hash you can actually set ObjectHash=tostring(tonumber(strsub(ObjectTemplateName(self), 6, 13), 16)) Also don`t forget to add the AttributeModifierWeapon and the special power (last two for loops). For the weapon and attribute modifier my idea was something like this maybe: <WeaponTemplate id="PrismTowerSupportWeapon" Name="PrismTowerSupportWeapon" RadiusDamageAffects="ALLIES" AttackRange="15000.0"> <Nuggets> <AttributeModifierNugget Radius="15000" PartitionFilterTestType="SPHERE" AttributeModifierName="AttributeModifier_PrismTowerSupport"> <SpecialObjectFilter Rule="ANY" Relationship="SAME_PLAYER"> </SpecialObjectFilter> </AttributeModifierNugget> </Nuggets> </WeaponTemplate> <AttributeModifier id="AttributeModifier_PrismTowerSupport" Category="NONE" StackingLimit="999" Duration="1.0s"> <Modifier Type="DAMAGE_MULT" Value="100%"/> </AttributeModifier> At least the duration needs adjustment and I^m not sure about the DAMAGE_MULT, as I^ve seen absolute as well as percent values.
  23. In terms of me testing this in a C&C3 skirmish match, is the 'function CascadeForwarding(self)' a script that is to be broadcast when the main Obelisk gets a target and goes into 'PREATTACK_A'? It is quite a complex script (for me), so I am just trying to minimise my errors.
  24. OK, I look forward to this!
  25. See the news blog for updates on development: http://www.moddb.com/mods/mjjstral/news/future-of-meta-mod
  26. Yes but first I want to finish the multiplayer compatibility code for meta mod in Kane`s Wrath.
  27. Do you still plan on releasing a C&C3 version?
  28. In that context of C&C mobile gaming, I can recommend the "GPD WIN", an ultra portable pc with full windows 10 that fits in your pocket and can run all C&C games great! I even use it for programming and modding tasks sometimes.
  1. Load more activity