- Joined
- Jun 2, 2009
- Messages
- 1,205
First, let me tell you about the problem.
2 weeks ago we have played JFA (v1.3c) for 10 days but 2 days ago we've encountered with weird problem.
At the JFA (v1.4beta) version, we've created 2 new slots for refree players and re-created neutral spawn triggers. In the game, when the neutral creeps spawned, some of the players dropped from the game. I said "ok maybe the problem is new neutral creeps spawn trigger" but when we created old version same thing happened again and i was back to my home but one of my friends called me and said "hey, i'm dropping from dota map when the neutral creeps spawned"
When i'm arrived at my home i'm uninstalled warcraft 3 and installed again and installed our gaming server again but i realized some of the players drops from the game when neutral creeps spawned
and let me show you to my new neutral creep spawn trigger
and my main problem is reasons of the dropping is about the map?
2 weeks ago we have played JFA (v1.3c) for 10 days but 2 days ago we've encountered with weird problem.
At the JFA (v1.4beta) version, we've created 2 new slots for refree players and re-created neutral spawn triggers. In the game, when the neutral creeps spawned, some of the players dropped from the game. I said "ok maybe the problem is new neutral creeps spawn trigger" but when we created old version same thing happened again and i was back to my home but one of my friends called me and said "hey, i'm dropping from dota map when the neutral creeps spawned"
When i'm arrived at my home i'm uninstalled warcraft 3 and installed again and installed our gaming server again but i realized some of the players drops from the game when neutral creeps spawned
and let me show you to my new neutral creep spawn trigger
Part I
Code:
library NCSpawn initializer Init
globals
public constant real NEUTRAL_SPAWN_TIME = 60.00
public hashtable Hash = InitHashtable()
camp array Camps
private integer CampCount = 0
endglobals
struct camp
integer array types[4]
integer array counts[4]
integer typeCount
endstruct
function GetRectId takes rect r returns integer
local integer i = 1
loop
if udg_CreepSpawnRegions[i] == r or udg_CreepSpawnCenterRegions[i] == r then
return i
endif
set i = i + 1
exitwhen i == 14
endloop
return 0
endfunction
function ReturnNCSpawnSmall takes nothing returns nothing
//local integer id = GetHandleId(LoadRectHandle(Hash, GetHandleId(GetTriggeringRegion()), 0))
local real x
local real y
//set x = GetRectCenterX(LoadRectHandle(Hash, id, 0))
//set y = GetRectCenterY(LoadRectHandle(Hash, id, 0))
//call IssuePointOrder(GetTriggerUnit(), "move", x, y)
local integer id = GetHandleId(GetTriggeringRegion())
if LoadRectHandle(Hash, id, 0) == LoadRectHandle(Hash, GetHandleId(GetTriggerUnit()), 0) then
// creep kendi spawn regionundan cikmis ise
// center regionun kayitli oldugu id'yi bul
set id = GetHandleId(LoadRectHandle(Hash, id, 0))
set x = GetRectCenterX(LoadRectHandle(Hash, id, 0))
set y = GetRectCenterY(LoadRectHandle(Hash, id, 0))
call IssuePointOrder(GetTriggerUnit(), "move", x, y)
endif
endfunction
function ReturnNCSpawnBarat takes nothing returns nothing
local integer id = GetHandleId(LoadRectHandle(Hash, GetHandleId(GetTriggeringRegion()), 0))
local real x = GetRectCenterX(LoadRectHandle(Hash, id, 0))
local real y = GetRectCenterY(LoadRectHandle(Hash, id, 0))
call SetUnitPosition(GetTriggerUnit(), x, y)
call IssueImmediateOrder(GetTriggerUnit(), "stop")
endfunction
function ReturnNCSpawn takes nothing returns nothing
local integer id = GetHandleId(LoadRectHandle(Hash, GetHandleId(GetTriggeringRegion()), 0))
call IssuePointOrder(GetTriggerUnit(), "move", GetRectCenterX(LoadRectHandle(Hash, id, 0)), GetRectCenterY(LoadRectHandle(Hash, id, 0)))
endfunction
function LeaveNCSpawn takes rect r returns nothing
local region re = CreateRegion()
call RegionAddRect(re, r)
call TriggerRegisterLeaveRegion(gg_trg_NC_Spawn_Leave_Region, re, null)
// region points to bigger rect
call SaveRectHandle(Hash, GetHandleId(re), 0, r)
// bigger rect points to center rect
call SaveRectHandle(Hash, GetHandleId(r), 0, udg_CreepSpawnCenterRegions[GetRectId(r)])
set re = null
endfunction
function RegisterCreepCamp takes integer id1, integer id2, integer id3, integer count1, integer count2, integer count3 returns nothing
local integer array ids
local integer array counts
local integer i = 1
local unit u
local boolean b = false
set Camps[CampCount] = camp.create()
set Camps[CampCount].typeCount = 0
if id1 != 0 and count1 != 0 then
set ids[1] = id1
set counts[1] = count1
set b = true
endif
if id2 != 0 and count2 != 0 then
set ids[2] = id2
set counts[2] = count2
set b = true
endif
if id3 != 0 and count3 != 0 then
set ids[3] = id3
set counts[3] = count3
set b = true
endif
loop
if ids[i] != 0 then
set Camps[CampCount].types[i] = ids[i]
set Camps[CampCount].counts[i] = counts[i]
set Camps[CampCount].typeCount = Camps[CampCount].typeCount + 1
endif
set i = i + 1
exitwhen i == 4
endloop
if b then
set CampCount = CampCount + 1
else
call Camps[CampCount].destroy()
endif
endfunction
private function Enum takes nothing returns boolean
if GetWidgetLife(GetFilterUnit()) > 0 and GetOwningPlayer(GetFilterUnit()) == Player(PLAYER_NEUTRAL_AGGRESSIVE) then
return true
endif
return false
endfunction
function PeriodicNeutralSpawn takes nothing returns nothing
local integer i = 0
local integer j = 0
local integer k = 0
local integer rnd
// loop for region
loop
set i = i + 1
call GroupEnumUnitsInRect(bj_lastCreatedGroup, udg_CreepSpawnCenterRegions[i], Condition(function Enum))
if FirstOfGroup(bj_lastCreatedGroup) == null then
// randomize for camp
set rnd = GetRandomInt(0, CampCount - 1)
// loop for types
loop
set j = j + 1
// loop for count
loop
exitwhen k >= Camps[rnd].counts[j]
set bj_lastCreatedUnit = CreateUnit(Player(PLAYER_NEUTRAL_AGGRESSIVE), Camps[rnd].types[j], GetRectCenterX(udg_CreepSpawnCenterRegions[i]), GetRectCenterY(udg_CreepSpawnCenterRegions[i]), 0)
call SaveRectHandle(Hash, GetHandleId(bj_lastCreatedUnit), 0, udg_CreepSpawnRegions[i])
set k = k + 1
endloop
set k = 0
exitwhen j >= Camps[rnd].typeCount
endloop
set j = 0
endif
exitwhen i >= udg_CreepSpawnRegionCount
endloop
endfunction
public function Display takes nothing returns nothing
local integer i = 0
local integer j = 1
call BJDebugMsg("Camp Count:"+I2S(CampCount))
loop
call BJDebugMsg("Creep type count of camp "+I2S(i + 1)+"="+I2S(Camps[i].typeCount))
loop
call BJDebugMsg(I2S(j+1)+"st type of camp "+I2S(i + 1)+"="+GetObjectName(Camps[i].types[j]))
set j = j + 1
exitwhen j >= Camps[i].typeCount
endloop
set i = i + 1
exitwhen i >= CampCount
endloop
endfunction
private function Init takes nothing returns nothing
endfunction
endlibrary
PART II
-
NC Spawn Ayarlar
-
Events
- Map initialization
- Conditions
-
Actions
- -------- Spawn olabilecek creep camp çeşitleri --------
- -------- Kullanış şekli şöyle: --------
- -------- call RegisterNCCamp(creepÇeşidi1, creepÇeşidi2, creepÇeşidi3, çıkacakCreepSayısı1, çıkacakCreepSayısı2, çıkacakCreepSayısı3) --------
- Custom script: call RegisterCreepCamp('h02I', 0, 0, 3, 0, 0)
- Custom script: call RegisterCreepCamp('h04H', 'h02V', 0, 2, 1, 0)
- Custom script: call RegisterCreepCamp('e00R', 0, 0, 1, 0, 0)
- Custom script: call RegisterCreepCamp('h04G', 'h04I', 0, 2, 1, 0)
- -------- Regionlar --------
- -------- Kücük creeplerin regionları --------
- Set CreepSpawnRegions[1] = NcUstCheck1 <gen>
- Set CreepSpawnCenterRegions[1] = NcUst1 <gen>
- Set CreepSpawnRegions[2] = NcUstCheck2 <gen>
- Set CreepSpawnCenterRegions[2] = NcUst2 <gen>
- Set CreepSpawnRegions[3] = NcUstCheck3 <gen>
- Set CreepSpawnCenterRegions[3] = NcUst3 <gen>
- Set CreepSpawnRegions[4] = NcUstCheck4 <gen>
- Set CreepSpawnCenterRegions[4] = NcUst4 <gen>
- Set CreepSpawnRegions[5] = NcAltCheck1 <gen>
- Set CreepSpawnCenterRegions[5] = NcAlt1 <gen>
- Set CreepSpawnRegions[6] = NcAltCheck2 <gen>
- Set CreepSpawnCenterRegions[6] = NcAlt2 <gen>
- Set CreepSpawnRegions[7] = NcAltCheck3 <gen>
- Set CreepSpawnCenterRegions[7] = NcAlt3 <gen>
- Set CreepSpawnRegions[8] = NcAltCheck4 <gen>
- Set CreepSpawnCenterRegions[8] = NcAlt4 <gen>
- -------- DiÄŸer regionlar --------
- Set CreepSpawnRegions[9] = NCBuyukUst <gen>
- Set CreepSpawnCenterRegions[9] = NCUstBuyukSpawn <gen>
- Set CreepSpawnRegions[10] = NCBuyukAlt <gen>
- Set CreepSpawnCenterRegions[10] = NCAltBuyukSpawn <gen>
- Set CreepSpawnRegions[11] = BaratSolBolge <gen>
- Set CreepSpawnCenterRegions[11] = BaratSolCenter <gen>
- Set CreepSpawnRegions[12] = BaratSagBolge <gen>
- Set CreepSpawnCenterRegions[12] = BaratSagCenter <gen>
- Set CreepSpawnRegions[13] = SpiritArea <gen>
- Set CreepSpawnCenterRegions[13] = SpiritCenter <gen>
- -------- Küçük spawn region sayısı --------
- Set CreepSpawnRegionCount = 8
- -------- Kücük creepler regiondan cikmasn --------
-
For each (Integer A) from 1 to CreepSpawnRegionCount, do (Actions)
-
Loop - Actions
- Custom script: call LeaveNCSpawn(udg_CreepSpawnRegions[bj_forLoopAIndex])
-
Loop - Actions
- -------- Büyük creepler regiondan cikmasn --------
- Custom script: call LeaveNCSpawn(gg_rct_NCBuyukUst)
- Custom script: call LeaveNCSpawn(gg_rct_NCBuyukAlt)
- -------- Barat regiondan cikmasin --------
- Custom script: call LeaveNCSpawn(gg_rct_BaratSolBolge)
- Custom script: call LeaveNCSpawn(gg_rct_BaratSagBolge)
- -------- Spirit regiondan cikmasın --------
- Custom script: call LeaveNCSpawn(gg_rct_SpiritArea)
-
Events
PART III
-
NC Spawn Leave Region
- Events
-
Conditions
- (Owner of (Triggering unit)) Equal to Neutral Hostile
-
Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Or - Any (Conditions) are true
-
Conditions
- (Unit-type of (Triggering unit)) Equal to Baratrum the Teabringer (neutral)
- (Unit-type of (Triggering unit)) Equal to Spirit
- (Custom value of (Triggering unit)) Equal to 5
- (Custom value of (Triggering unit)) Equal to 10
-
Conditions
-
Or - Any (Conditions) are true
-
Then - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- (Unit-type of (Triggering unit)) Equal to Baratrum the Teabringer (neutral)
-
Then - Actions
- -------- Barat --------
- Set TempPoint = (Position of (Triggering unit))
- Special Effect - Create a special effect at TempPoint using Abilities\Spells\Human\MassTeleport\MassTeleportTarget.mdl
- Custom script: call RemoveLocation(udg_TempPoint)
- Custom script: call ReturnNCSpawnBarat()
-
Else - Actions
- -------- Ghost --------
- -------- Buyuk Creepler Ust --------
- -------- Buyuk Creepler Alt --------
- Custom script: call ReturnNCSpawn()
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
Else - Actions
- -------- Kucuk Creepler --------
- Custom script: call ReturnNCSpawnSmall()
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
PART IV
-
NC Spawn Start
-
Events
- Time - timer_nc_kucuk expires
- Conditions
-
Actions
- -------- Kücük Creepler, random --------
- Custom script: call ExecuteFunc("PeriodicNeutralSpawn")
- Custom script: call TimerStart(CreateTimer(), NCSpawn_NEUTRAL_SPAWN_TIME, true, function PeriodicNeutralSpawn)
- -------- Büyük creepler --------
- Trigger - Turn on NeutralCreepRespawnsBuyuk <gen>
- Trigger - Run NeutralCreepRespawnsBuyuk <gen> (checking conditions)
-
Events
PART V
-
NeutralCreepRespawnsBuyuk
-
Events
- Time - Every 120.00 seconds of game time
- Conditions
-
Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- (Number of units in (Units in NCBuyukUst <gen>)) Equal to 0
-
Then - Actions
- Unit - Create 1 Ogre Magi (neutral) for Neutral Hostile at (Center of NCUstBuyukSpawn <gen>) facing Default building facing degrees
- Unit - Set the custom value of (Last created unit) to 5
- Custom script: call SaveRectHandle(NCSpawn_Hash, GetHandleId(bj_lastCreatedUnit), 0, gg_rct_NCBuyukUst)
- Unit - Create 1 Ogre Lord (neutral) for Neutral Hostile at (Center of NCUstBuyukSpawn <gen>) facing Default building facing degrees
- Unit - Set the custom value of (Last created unit) to 5
- Custom script: call SaveRectHandle(NCSpawn_Hash, GetHandleId(bj_lastCreatedUnit), 0, gg_rct_NCBuyukUst)
- Unit - Create 1 Troll Warlord (neutral) for Neutral Hostile at (Center of NCUstBuyukSpawn <gen>) facing Default building facing degrees
- Unit - Set the custom value of (Last created unit) to 5
- Custom script: call SaveRectHandle(NCSpawn_Hash, GetHandleId(bj_lastCreatedUnit), 0, gg_rct_NCBuyukUst)
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- (Number of units in (Units in NCBuyukAlt <gen>)) Equal to 0
-
Then - Actions
- Unit - Create 1 Ogre Magi (neutral) for Neutral Hostile at (Center of NCAltBuyukSpawn <gen>) facing Default building facing degrees
- Unit - Set the custom value of (Last created unit) to 10
- Custom script: call SaveRectHandle(NCSpawn_Hash, GetHandleId(bj_lastCreatedUnit), 0, gg_rct_NCBuyukAlt)
- Unit - Create 1 Ogre Lord (neutral) for Neutral Hostile at (Center of NCAltBuyukSpawn <gen>) facing Default building facing degrees
- Unit - Set the custom value of (Last created unit) to 10
- Custom script: call SaveRectHandle(NCSpawn_Hash, GetHandleId(bj_lastCreatedUnit), 0, gg_rct_NCBuyukAlt)
- Unit - Create 1 Troll Warlord (neutral) for Neutral Hostile at (Center of NCAltBuyukSpawn <gen>) facing Default building facing degrees
- Unit - Set the custom value of (Last created unit) to 10
- Custom script: call SaveRectHandle(NCSpawn_Hash, GetHandleId(bj_lastCreatedUnit), 0, gg_rct_NCBuyukAlt)
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
Events
and my main problem is reasons of the dropping is about the map?