- Joined
- Jun 17, 2007
- Messages
- 1,433
I'd like to know what you guys specialize in so I can assign the tasks accordingly (spells, systems, etc...).
Let this be my resignation from WC3: WoW. I don't want to leave Condemned Entertainment all together, but I can't continue on this project. Here's just a few of the reasons why:
-Without being able to code in vJASS (easilly, at least), coding is much more difficult.
-Lack of communication between team members.
-It doesn't seem like anybody else is even working.
-I lost all of my work when my HDD become corrupt last week.
Good work Eleandor. This is a major breakthrough since many experienced JASS coders are turned off from the idea that we couldn't use vJASS. But with this new discovery, we may be able to recruit and hold onto more skilled JASS coders. Thanks a lot! Please keep working and keep me as up to date as you can.
My exams will be starting pretty soon (in 1 month, to be precise, and I haven't done anything yet...), so probably won't be doing anything big the next weeks.I haven't been on for a while due to exams, a broken PC again, and overall a busy status. I'm trying hard to get my PC fixed though and there's a wide rumor that schools in my district will close down due to the outbreak of the Swine Flu virus. If that's true, I might be able to get to work on something or at least answer emails and forum questions.
Not sure what you mean. If I save a campaign in newgen it just skips the part where it should compile the mapscript. This effectively breaks the campaign and makes it unplayable. If you run the tool afterwards, it fixes the campaignfile so it works.EDIT: How would you use Campaign Jass without breaking the campaign file itself? The only logical way I could think of is disable pJass + WE's checker let the campaign compile then running Campaign Jass.
Extract all maps from the campaign mpq, then read the map and compile the mapscript, then import the map into the campaign again. That's what I do. It's a pretty simple solution and I don't know why newgen doesn't do it. In fact, my tool extracts all maps, while newgen should be able to detect which maps have been modified and thus only needs to compile those maps, speeding up the process of saving the campaign.EDIT2: Grimoire/JassNewGen cannot read a mpq inside a mpq, which is why it fails at saving campaigns and some programming related stuff to how Blizzard's Campaign mpq's work as well or something. But I guess this is the most simple explanation I could think of
Obviously it ain't as easy as it seems Eleandor.
Grimoire:
Bryan "PipeDream" Steinbach - [email protected]
Andy "xttocs" Scott
Mike "PitzerMike" Pitzer
Victor "Vexorian" Soliz
Nikolaj "MindWorX" Mariager
function Assert takes boolean doAssert, string message returns nothing
if doAssert then
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60.0, "Assertion failed: " + message)
endif
endfunction
// Example:
local unit u = RestoreUnit(...)
debug call Assert(u == null, "Restored unit is null")
debug call Assert(itemcost < 0, "itemcost should not be less than zero")
private constant integer MAX_INSTANCES=8100 //400000
Ofcourse. AFAIK Table doesn't even have a way to save the underlying cache to hard drive.True, the thing is that I reckon we should just use standard Gamecache functions instead of using table.
Yes, but Table uses caches. When a new table is created, it's assigned a missionkey. When an index of a table is used, the index corresponds with a key. Thus, if there's a maximum amount of tables of 400000, then it means you can use max. 400000 missionkeys in 1 cache, correct?@Table: I think that's the maxium amount of tables you can have. I highly doubt that we can break the limit, but we'll see.
You mean 1 cache for data transfer between maps (on hard drive), and 1 cache (used in Table) for tables?1 primary cache to store stuff on the player's cpu
And a temp one to store info while they are on a map.
unit
will probably be associated with a Unit
.local Unit caster = Unit[GetTriggerUnit()]
local Hero target = Unit[GetSpellTargetUnit()]
local Hero you = Hero.hero
call KillUnit(target.u)
local Unit caster = Unit[GetTriggerUnit()]
call caster.modifyAttackSpeed(0.3)
call TriggerSleepAction(5.0)
call caster.setAttackSpeed(caster.getAttackSpeed() - 0.3)
local Bonus b = Bonus.MoveSpeed(50.0)
local Hero h = Unit[GetTriggerUnit()]
call b.apply(h)
call b.unapply(h)
call b.destroy()
Toadcop said:Hi ! =) well i don't know if i can explain it well... there are several ways to prevent\do the 3D pathing.
the most important is trigger based. On Enter|Leave events.
the most imporant to do it correctly is to sort objects. and to recaclucate it every time you leave something. so i move the unit to the map border and return it to the location. so the triggers triggering again =) and i get the needed data.
the second step is to use corrrectly the recieved data in unit movement function. in my case it's relative simple.
i have max_height = the floor if the value is 0 so i walk on ground
min_height = i am under of some floor so if i would jump i may hit with the head it.
in fact i only recently made the system properly walking, ^_^ so now it support X floors etc. but you need to remember what alot triggers and rect events may cause performance issues (if triggering alot at once so more when 2 floors isnt recommended)
ok well i will upload an open version of TcXAOS with activated stairs example ^_^
hmm you will need cJass to be able to save the map properly... or import the code into the map =) later it will full depend on cJass (AdicHelper) http://cjass.xgm.ru
MAP
here is the code for this triggers
JASS:function HWEnterRegEvent takes nothing returns boolean local xunit xu=0 if GetUnitAbilityLevel(GetTriggerUnit(),IsPlayer)>0 then set xu=GetUnitUserData(GetTriggerUnit()) set hwxx=h2i(GetTriggeringTrigger())-HWminindex set xu.hwref=xu.hwref+1 //set xu.hwref4=xu.hwref4+1 //call echo("Ref count "+I2S(xu.hwref)) if hwxx.zmax>xu.z+xu.Zstep then if hwxx.zmin<xu.hwminzx2 and hwxx.zmin>xu.z then set xu.hwminzx2=hwxx.zmin set xu.hwminzx=hwxx.zmin set xu.hwminz=hwxx.zmin endif if hwxx.zmin<xu.Zmax+xu.z and hwxx.zmax>xu.hwmaxzx2 then set xu.hwmaxzx2=hwxx.zmax endif elseif hwxx.zmax<=xu.z+xu.Zstep and hwxx.zmax>=xu.hwmaxzx1 then set xu.hwmaxzx1=hwxx.zmax endif if xu.z>=hwxx.zmax-xu.Zstep then if hwxx.zmax>=xu.hwmaxzx1 then //set xu.hwminz=0 //set xu.hwminzx=hwxx.zmin set xu.hwmaxzx=hwxx.zmax set xu.hwmaxz=hwxx.zmax endif elseif hwxx.zmax>xu.z+xu.Zstep and hwxx.zmin<=xu.Zmax+xu.z then if not xu.disablehw then //set xu.disablehw=true if hwxx.dummy!=null then call SetDestructableAnimation(hwxx.dummy,"spell") call QueueDestructableAnimation(hwxx.dummy,"stand") else endif if xu.hwref3==0 then //set xu.hwminzx=hwxx.zmin //set xu.hwmaxzx=hwxx.zmax set xu.vecx=0 set xu.vecy=0 set xu.veclastx=0 set xu.veclasty=0 set xu.x=xu.prevx set xu.y=xu.prevy call SetUnitX(xu.u,tcx_border_min_x) call SetUnitY(xu.u,xu.y) call SetUnitX(xu.u,xu.x) set xu.hwref3=1 endif //set HW_timeout_attach[GetTimerIdBR(xu.hwtimeout)]=xu //call TimerStart(xu.hwtimeout,0,false,function HW_timeout_func) endif endif elseif GetUnitAbilityLevel(GetTriggerUnit(),IsCreep)>0 then set xu=GetUnitUserData(GetTriggerUnit()) set hwxx=h2i(GetTriggeringTrigger())-HWminindex set xu.x=GetUnitX(xu.u) set xu.y=GetUnitY(xu.u) set xu.z=GetUnitZ(xu.u) if xu.z>=hwxx.zmax-xu.Zstep then set xu.hwmaxz=hwxx.zmax set xu.hwref=xu.hwref+1 call TCM_AddCreepToStack(xu) elseif xu.z<=hwxx.zmin then set xu.hwminz=hwxx.zmin set xu.hwref=xu.hwref+1 else set xu.vecx=0 set xu.vecy=0 set xu.vecz=0 endif elseif IsProjX(GetTriggerUnit()) then set mmx=GetUnitUserData(GetTriggerUnit()) set hwxx=h2i(GetTriggeringTrigger())-HWminindex if hwxx.type==1 then if mmx.z>=hwxx.zmin and mmx.z<=hwxx.zmax then set doodcol=true if not mmx.nocoll then call DestroyProjBR(mmx.u) endif set doodcol=false endif endif endif return false endfunction function HWLeaveRegEvent takes nothing returns boolean local xunit xu=0 if GetUnitAbilityLevel(GetTriggerUnit(),IsPlayer)>0 then set xu=GetUnitUserData(GetTriggerUnit()) set xu.hwref=xu.hwref-1 set xu.hwref2=xu.hwref2+1 set xu.hwmaxz=xu.hwmaxzx1 set xu.hwminz=xu.hwminzx2 //call echo("Ref count "+I2S(xu.hwref)) if xu.hwref2==1 then call SetUnitX(xu.u,tcx_border_min_x) call SetUnitX(xu.u,xu.x) endif if xu.hwref<=0 then set xu.hwmaxz=0 set xu.hwminz=0 set xu.hwminzx=0 set xu.hwmaxzx=0 set xu.hwminzx1=-9999999 set xu.hwmaxzx1=-9999999 set xu.hwminzx2=9999999 set xu.hwmaxzx2=-9999999 endif elseif GetUnitAbilityLevel(GetTriggerUnit(),IsCreep)>0 then set xu=GetUnitUserData(GetTriggerUnit()) if xu.hwmaxz!=0 then set xu.hwmaxz=0 set xu.hwminz=0 set xu.hwminzx=0 set xu.hwmaxzx=0 set xu.hwref=xu.hwref-1 call TCM_RemoveCreepFromStack(xu) set xu.paused=xu.paused+1 call PauseUnit(xu.u,true) set xu.x=GetUnitX(xu.u) set xu.y=GetUnitY(xu.u) set xu.z=GetUnitZ(xu.u) set erx=GetUnitFacing(xu.u)*0.0175 set xu.vecx=xu.speed*Cos(erx) set xu.vecy=xu.speed*Sin(erx) set xu.vecz=0 call TCM_AddCreepToStack1(xu) endif endif return false endfunction
Here-b-Trollz made it on wc3c.net. It's still in resource submission, when I tested it it seemed to work but if it doesn't seem to work, get rid of it and use something else you want.EDIT2: Eleandor, where is that SpellEvent library from? I only found Anitarf's one, but it's different from the one you implemented in your spell template map.
Go for it.
Here-b-Trollz made it on wc3c.net. It's still in resource submission, when I tested it it seemed to work but if it doesn't seem to work, get rid of it and use something else you want.