mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-18 09:54:46 +01:00
Raviente Patch
This commit is contained in:
@@ -12,13 +12,35 @@ func handleMsgSysCreateSemaphore(s *Session, p mhfpacket.MHFPacket) {
|
||||
}
|
||||
|
||||
func handleMsgSysDeleteSemaphore(s *Session, p mhfpacket.MHFPacket) {
|
||||
//pkt := p.(*mhfpacket.MsgSysDeleteSemaphore)
|
||||
|
||||
s.semaphore.Lock()
|
||||
pkt := p.(*mhfpacket.MsgSysDeleteSemaphore)
|
||||
sem := pkt.AckHandle
|
||||
if s.server.semaphore != nil {
|
||||
s.server.semaphoreLock.Lock()
|
||||
for id := range s.server.semaphore {
|
||||
delete(s.server.semaphore[id].reservedClientSlots, s.charID)
|
||||
switch sem {
|
||||
case 917533:
|
||||
if s.server.semaphore[id].id_semaphore == "hs_l0u3B51J9k3" {
|
||||
delete(s.server.semaphore["hs_l0u3B51J9k3"].reservedClientSlots, s.charID)
|
||||
delete(s.server.semaphore["hs_l0u3B51J9k3"].clients, s)
|
||||
}
|
||||
case 851997:
|
||||
if s.server.semaphore[id].id_semaphore == "hs_l0u3B51J9k4" {
|
||||
delete(s.server.semaphore["hs_l0u3B51J9k4"].reservedClientSlots, s.charID)
|
||||
}
|
||||
case 786461:
|
||||
if s.server.semaphore[id].id_semaphore == "hs_l0u3B51J9k5" {
|
||||
delete(s.server.semaphore["hs_l0u3B51J9k5"].reservedClientSlots, s.charID)
|
||||
}
|
||||
default:
|
||||
if len(s.server.semaphore[id].reservedClientSlots) != 0 {
|
||||
if s.server.semaphore[id].id_semaphore != "hs_l0u3B51J9k3" && s.server.semaphore[id].id_semaphore != "hs_l0u3B51J9k4" && s.server.semaphore[id].id_semaphore != "hs_l0u3B51J9k5" {
|
||||
delete(s.server.semaphore[id].reservedClientSlots, s.charID)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
s.server.semaphoreLock.Unlock()
|
||||
}
|
||||
s.semaphore.Unlock()
|
||||
}
|
||||
|
||||
func handleMsgSysCreateAcquireSemaphore(s *Session, p mhfpacket.MHFPacket) {
|
||||
@@ -49,11 +71,33 @@ func handleMsgSysCreateAcquireSemaphore(s *Session, p mhfpacket.MHFPacket) {
|
||||
s.logger.Info("IS ALREADY EXIST !")
|
||||
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x0F, 0x00, 0x1D})
|
||||
} else if uint16(len(newSemaphore.reservedClientSlots)) < newSemaphore.maxPlayers {
|
||||
newSemaphore.reservedClientSlots[s.charID] = nil
|
||||
s.Lock()
|
||||
s.semaphore = newSemaphore
|
||||
s.Unlock()
|
||||
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x0F, 0x00, 0x1D})
|
||||
switch SemaphoreID {
|
||||
case "hs_l0u3B51J9k3":
|
||||
newSemaphore.reservedClientSlots[s.charID] = nil
|
||||
newSemaphore.clients[s] = s.charID
|
||||
s.Lock()
|
||||
s.semaphore = newSemaphore
|
||||
s.Unlock()
|
||||
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x0E, 0x00, 0x1D})
|
||||
case "hs_l0u3B51J9k4":
|
||||
newSemaphore.reservedClientSlots[s.charID] = nil
|
||||
s.Lock()
|
||||
s.semaphore = newSemaphore
|
||||
s.Unlock()
|
||||
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x0D, 0x00, 0x1D})
|
||||
case "hs_l0u3B51J9k5":
|
||||
newSemaphore.reservedClientSlots[s.charID] = nil
|
||||
s.Lock()
|
||||
s.semaphore = newSemaphore
|
||||
s.Unlock()
|
||||
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x0C, 0x00, 0x1D})
|
||||
default:
|
||||
newSemaphore.reservedClientSlots[s.charID] = nil
|
||||
s.Lock()
|
||||
s.semaphore = newSemaphore
|
||||
s.Unlock()
|
||||
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x0F, 0x00, 0x25})
|
||||
}
|
||||
} else {
|
||||
doAckSimpleFail(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
|
||||
}
|
||||
@@ -65,15 +109,26 @@ func handleMsgSysAcquireSemaphore(s *Session, p mhfpacket.MHFPacket) {
|
||||
|
||||
func handleMsgSysReleaseSemaphore(s *Session, p mhfpacket.MHFPacket) {
|
||||
//pkt := p.(*mhfpacket.MsgSysReleaseSemaphore)
|
||||
for _, session := range s.server.sessions {
|
||||
session.semaphore.Lock()
|
||||
for id := range session.server.semaphore {
|
||||
delete(s.server.semaphore[id].reservedClientSlots, s.charID)
|
||||
if _, exists := s.server.semaphore["hs_l0u3B51J9k3"]; exists {
|
||||
reset := len(s.server.semaphore["hs_l0u3B51J9k3"].reservedClientSlots)
|
||||
if reset == 0 {
|
||||
s.server.db.Exec("CALL ravireset($1)", 0)
|
||||
}
|
||||
session.semaphore.Unlock()
|
||||
}
|
||||
//data, _ := hex.DecodeString("000180e703000d443b37ff006d00131809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010627426400a936a93600000100cf330600cc31cc31d431000025000000000000000000010218330600bd3cbd3cbd3c01032c280600ee3dee3da9360104f3300600d231a936a93601054a310600e23ae23ae23a00000d0000000000004d814c0000000003008501d723b7334001e7038b3fd437d516113505000000e7030001000002000203000000000000fafafafafafafafafafafafafafa000000000000ecb2000060da0000000000000000000000000000000000000000000000000000000000000000000000000000181818187e2d00003b31702d662d402e000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000")
|
||||
//doAckBufSucceed(s, pkt.AckHandle, data)
|
||||
}
|
||||
|
||||
func removeSessionFromSemaphore(s *Session) {
|
||||
|
||||
s.server.semaphoreLock.Lock()
|
||||
for id := range s.server.semaphore {
|
||||
delete(s.server.semaphore[id].reservedClientSlots, s.charID)
|
||||
if id == "hs_l0u3B51J9k3" {
|
||||
delete(s.server.semaphore[id].clients, s)
|
||||
} else {
|
||||
continue
|
||||
}
|
||||
}
|
||||
s.server.semaphoreLock.Unlock()
|
||||
}
|
||||
|
||||
func handleMsgSysCheckSemaphore(s *Session, p mhfpacket.MHFPacket) {
|
||||
|
||||
Reference in New Issue
Block a user